# 实现表crud查询
from sqlalchemy.sql.expression import true
from sqlalchemy.sql.functions import user
from sql.database import db_session
from sqlalchemy import or_,and_,desc,asc
from sql.models import Yhb

# 根据id获取用户
def get_user(yhbh:str):
  db = db_session()
  # Query 对象/列
  # filter 过滤，写查询条件
  # first() 返回第一条语句
  # all() 返回所有语句
  # __dict__ 获取字典类型的结果
  res = db.query(Yhb).filter(Yhb.yhbh == yhbh).first()
  # filter(and_(Yhb.yhgs == '三公司',Yhb.yhgroup=='下午')).offset(10).limit(10)
  db.close()
  res = res.__dict__ if res else None   # 将Yhb对象转化为dictleixing 
  return res
  
# #查询用户列表
def get_user_list(params:dict={},page:int=1,limit=20,order_by='yhbh_asc'):  #参数字典
    print(params)
    db = db_session()
    #使用列表生成式生成动态条件，并筛选属性不为空的字段
    conditions = [Yhb.__dict__[key] == val for key,val in params.items() if val!='']
    orders = order_by.split('_')    #字符串拆分
    order_by = getattr(Yhb, orders[0]) if orders[1]=='asc' else getattr(Yhb, orders[0]).desc()  #生成排序参数
    res = db.query(Yhb).filter(*conditions).order_by(order_by).limit(limit).offset((page-1)*limit)  #查询
    total = db.query(Yhb).filter(*conditions).count()   #总行数
    res = [i.__dict__ for i in res]     #将数据库对象转化为list[dict]
    db.close()
    return res,total
    #字典->列表->filter参数

#更新函数，根据用户编号，更新用户数据
def update_user(yhbh:str,data:dict):
    db = db_session()
    #user转化为
    res = db.query(Yhb).filter(Yhb.yhbh == yhbh).update(data)
    #受影响行数
    db.close()
    return res

#删除函数
def delete_user(yhbh:str):
    db = db_session()
    #user转化为
    res = db.query(Yhb).filter(Yhb.yhbh == yhbh).delete() #删除操作
    #受影响行数
    db.close()
    return res

#添加函数
def add_user(data:dict):
    db = db_session()
    #user转化为
    user = Yhb(**data)  # ** 表示 有名参数，将字典键值对 =》 对象属性 - 值
    db.add(user)  # 添加操作
    db.flush()
    #受影响行数
    db.close()
    return true
